//
//  KFView.h
//  Test
//
//  Created by FallenK on 2016/10/26.
//  Copyright © 2016年 KFallen. All rights reserved.
//

#import <UIKit/UIKit.h>

/**
 默认都是nonnull
 NS_ASSUME_NONNULL_BEGIN
 NS_ASSUME_NONNULL_END 要成对出现，不然报错
 一般用于头文件.h 将声明包含起来针对所有属性添加 nonnull 修饰
 也就是说, 除了nullable和null_resetable需要加修饰, 其他都不需要加修饰
 */
NS_ASSUME_NONNULL_BEGIN
@interface KFView : UIView

@property (nonatomic, strong) NSArray<NSDictionary *> * _Nonnull arrayDict;

@property (nonatomic, strong) UILabel * __nullable testLabel;

@property (nonatomic, strong, null_resettable) UIBarButtonItem *item;

@property (nonatomic, strong) NSDictionary<NSString *, NSSet *> *dict;

/**
 初始化view

 @return <#return value description#>
 */
+ (instancetype)view;

- (__kindof NSArray*)returnArray;

@end


/**
 自定义容器,继承泛型
 */
//@interface Stack<ObjectType> : NSObject

// 只接受 NSNumber * 的泛型
//@interface Stack<ObjectType: NSNumber *> : NSObject

// 只接受满足 NSCopying 协议的泛型
@interface Stack<ObjectType: id<NSCopying>> : NSObject

- (void)pushObject:(ObjectType)object;

- (ObjectType)popObject;

@end


NS_ASSUME_NONNULL_END
